// Copyright 2010, Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v201003;

import com.google.api.adwords.lib.AdWordsService;
import com.google.api.adwords.lib.AdWordsServiceLogger;
import com.google.api.adwords.lib.AdWordsUser;
import com.google.api.adwords.v201003.cm.BidLandscape;
import com.google.api.adwords.v201003.cm.BidLandscapeIdFilter;
import com.google.api.adwords.v201003.cm.BidLandscapeLandscapePoint;
import com.google.api.adwords.v201003.cm.BidLandscapeServiceInterface;
import com.google.api.adwords.v201003.cm.CriterionBidLandscape;
import com.google.api.adwords.v201003.cm.CriterionBidLandscapeSelector;

/**
 * This example gets a bid landscape for an ad group and a criterion. To get ad
 * groups, run GetAllAdGroups.java. To get criteria, run
 * GetAllAdGroupCriteria.java.
 *
 * Tags: BidLandscapeService.get
 *
 * @author api.arogal@gmail.com (Adam Rogal)
 */
public class GetCriterionBidLandscape {
  public static void main(String[] args) {
    try {
      // Log SOAP XML request and response.
      AdWordsServiceLogger.log();

      // Get AdWordsUser from "~/adwords.properties".
      AdWordsUser user = new AdWordsUser();

      // Get the BidLandscapeService.
      BidLandscapeServiceInterface bidLandscapeService =
          user.getService(AdWordsService.V201003.BID_LANDSCAPE_SERVICE);

      long adGroupId = Long.parseLong("INSERT_AD_GROUP_ID_HERE");
      long criterionId = Long.parseLong("INSERT_CRITERION_ID_HERE");

      // Create selector.
      CriterionBidLandscapeSelector selector = new CriterionBidLandscapeSelector();

      // Create id filter.
      BidLandscapeIdFilter idFilter = new BidLandscapeIdFilter();
      idFilter.setCriterionId(criterionId);
      idFilter.setAdGroupId(adGroupId);
      selector.setIdFilters(new BidLandscapeIdFilter[] {idFilter});

      // Get bid landscape for ad group criteria.
      BidLandscape[] bidLandsacpes = bidLandscapeService.getBidLandscape(selector);

      // Display bid landscapes.
      if (bidLandsacpes != null) {
        for (BidLandscape bidLandscape : bidLandsacpes) {
          if (bidLandscape instanceof CriterionBidLandscape) {
            CriterionBidLandscape criterionBidLandscape = (CriterionBidLandscape) bidLandscape;
            System.out.println("Criterion bid landscape with ad group id \""
                + criterionBidLandscape.getAdGroupId() + "\", criterion id \""
                + criterionBidLandscape.getCriterionId() + "\", start date \""
                + criterionBidLandscape.getStartDate() + "\", end date \""
                + criterionBidLandscape.getEndDate() + "\", with landscape points: ");

            for (BidLandscapeLandscapePoint bidLanscapePoint
                : criterionBidLandscape.getLandscapePoints()) {
              System.out.println("\t{bid: " + bidLanscapePoint.getBid().getMicroAmount()
                  + " clicks: " + bidLanscapePoint.getClicks() + " cost: "
                  + bidLanscapePoint.getCost().getMicroAmount() + " marginalCpc: "
                  + bidLanscapePoint.getMarginalCpc().getMicroAmount() + " impressions: "
                  + bidLanscapePoint.getImpressions() + "}");
            }
            System.out.println(" was found.");
          }
        }
      } else {
        System.out.println("No bid landscapes were found.");
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
